﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using DTO;
using GUI.Common;
using System.Data;

namespace GUI
{
    public partial class ThanhToan : System.Web.UI.Page
    {
        #region Khai báo
        private KhachHangBLL khBLL;
        private KhachHangDTO khDTO;
        private NguoiNhanHangBLL nnhBLL;
        private NguoiNhanHangDTO nnhDTO;
        private CommonBLL _cmBLL;
        #endregion

        #region Page_Load
        protected void Page_Load(object sender, EventArgs e)
        {
            // Kiểm tra đăng nhập chưa nếu chưa thì quay về trang giỏ hàng
            if (Session["KhachHang"] != null)
            {
                if (!IsPostBack)
                {
                    // Tới đây là đã đăng nhập rồi
                    // ẩn panel 2
                    Panel2.Visible = false;
                    Panel3.Visible = false;
                    btnQuayLai.Enabled = false;
                    btnMuaHang.Enabled = false;

                    khBLL = new KhachHangBLL();
                    khDTO = new KhachHangDTO();

                    khDTO = (KhachHangDTO)Session["KhachHang"];
                    this.HienThiThongTinKhachHangTuKhachHangDTO(khDTO);

                    this.AddDropDownList(this.DropDownListDiaChiKhac, "NguoiNhanHang");
                    this.AddDropDownList(this.DropDownListPhuongThucGiaoHang, "HinhThucGiaoHang");
                    this.AddDropDownList(this.DropDownListPhuongThucThanhToan, "HinhThucThanhToan");
                }
            }
            else
                Response.Redirect("GioHang.aspx");

        }
        #endregion

        #region Phương thức load Dropdownlist
        /// <summary>
        /// Phương thức load Dropdownlist
        /// </summary>
        /// <param name="drop">DropDownList Name</param>
        /// <param name="tableName">TableName in database</param>
        private void AddDropDownList(DropDownList drop, string tablename)
        {
            string _strDisplay = "";
            string _strValue = "";

            _strDisplay = "Ten" + tablename;
            _strValue = "Ma" + tablename;

            try
            {
                _cmBLL = new CommonBLL();
                DataTable dt = new DataTable();
                dt = _cmBLL.getDataSet(tablename).Tables[0];

                drop.Items.Clear();
                drop.Items.Add("Default");
                foreach (DataRow rw in dt.Rows)   //Duyệt từng dòng trong Table
                {
                    ListItem litem = new ListItem(rw[_strDisplay].ToString(), rw[_strValue].ToString());
                    drop.Items.Add(litem);
                }
                drop.DataBind();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region Comment
        ////hien thi danh sach nguoi nhan hang cua 1 khach hangdklf
        //public void loadListNguoiNhanHangLenDDL()
        //{
        //    List<NguoiNhanHangDTO> lst = new List<NguoiNhanHangDTO>();
        //    NguoiNhanHangBLL nnhBLL = new NguoiNhanHangBLL();
        //    lst = nnhBLL.GetListNguoiNhanHang();

        //    ddldiachi.DataSource = lst;
        //    ddldiachi.DataTextField = "DiaChi";
        //    ddldiachi.DataValueField = "MaNguoiNhanHang";
        //    ddldiachi.DataBind();
        //    ddldiachi.Items.Insert(0, "Default");
        //}
        //public void loadListHinhThucGiaoHang()
        //{
        //    List<HinhThucGiaoHangDTO> lstHTGH = new List<HinhThucGiaoHangDTO>();
        //    HinhThucGiaoHangBLL htghBLL = new HinhThucGiaoHangBLL();
        //    lstHTGH = htghBLL.GetListHinhThucGiaoHang();

        //    ddlPhuongThucGiaoHang.DataSource = lstHTGH;
        //    ddlPhuongThucGiaoHang.DataTextField = "TenHinhThucGiaoHang";
        //    ddlPhuongThucGiaoHang.DataValueField = "MaHinhThucGiaoHang";
        //    ddlPhuongThucGiaoHang.DataBind();
        //    ddlPhuongThucGiaoHang.Items.Insert(0, "Default");

        //}

        //public void loadListHinhThucThanhToan()
        //{
        //    List<HinhThucThanhToanDTO> lstHTTT = new List<HinhThucThanhToanDTO>();
        //    HinhThucThanhToanBLL htttBLL = new HinhThucThanhToanBLL();
        //    lstHTTT = htttBLL.GetListHinhThucThanhToan();

        //    ddPhuongThucThanhToan.DataSource = lstHTTT;
        //    ddPhuongThucThanhToan.DataTextField = "TenHinhThucThanhToan";
        //    ddPhuongThucThanhToan.DataValueField = "MaHinhThucThanhToan";
        //    ddPhuongThucThanhToan.DataBind();
        //    ddPhuongThucThanhToan.Items.Insert(0, new ListItem("Default", "-1"));

        //}
        #endregion

        #region hienThiThongTinKhachHang từ KhachHangDTO
        // hiển thị thông tin khách hàng
        private void HienThiThongTinKhachHangTuKhachHangDTO(KhachHangDTO _khDTO)
        {
            // hiển thị lên texbox
            this.LabelMaKhachHang.Text = _khDTO.MaKhachHang;
            txthoten.Text = _khDTO.TenKhachHang;
            txtdiachi.Text = _khDTO.DiaChi;
            txtdienthoai.Text = _khDTO.DienThoai;
            TextBoxCMND_KhachHang.Text = _khDTO.CMND;
            txtemail.Text = _khDTO.Email;
        }
        #endregion

        #region Hiển thị thông tin người gởi từ textbox lên Label
        private void HienThiThongTinKhachHangTuTextBox()
        {
            //hiển thị lên label
            lblHoTenKH.Text = this.txthoten.Text;
            lblDiaChiKH.Text = this.txtdiachi.Text;
            lblDienThoaiKH.Text = this.txtdienthoai.Text;
            lblEmailKH.Text = this.txtemail.Text;
            LabelCMND_KhachHang.Text = this.TextBoxCMND_KhachHang.Text;
        }
        #endregion

        #region Hiển thị thông tin người nhận từ textbox
        private void HienThiThongTinNguoiNhan()
        {
            // Hiển thị trên textbox
            this.txthotennguoinhan.Text = this.txthoten.Text;
            this.txtdiachinguoinhan.Text = this.txtdiachi.Text;
            this.txtdienthoainguoinhan.Text = this.txtdienthoai.Text;
            this.TextBoxCMND_NguoiNhan.Text = this.TextBoxCMND_KhachHang.Text;


            // Hiển thị trên label
            lblHoTenNN.Text = txthotennguoinhan.Text;
            lblDienThoaiNN.Text = txtdienthoainguoinhan.Text;
            lblDiaChiNN.Text = txtdiachinguoinhan.Text;
            LabelCMND_NguoiNhan.Text = TextBoxCMND_NguoiNhan.Text;
        }
        #endregion

        #region btnQuayLai_Click
        protected void btnQuayLai_Click(object sender, EventArgs e)
        {
            Panel1.Visible = true;
            Panel2.Visible = false;
            btnQuayLai.Enabled = false;
            btnMuaHang.Enabled = false;
            btndongy.Enabled = true;
            btnnhaplai.Enabled = true;
        }
        #endregion

        #region btnnhaplai_Click
        protected void btnnhaplai_Click(object sender, EventArgs e)
        {
            ckbGiongKhachHang.Checked = false;
            this.DropDownListDiaChiKhac.SelectedIndex = 0;
            clearThongTinNguoiNhan();
        }
        #endregion

        #region clearThongTinNguoiNhan
        public void clearThongTinNguoiNhan()
        {
            txthotennguoinhan.Text = "";
            txtdiachinguoinhan.Text = "";
            txtdienthoainguoinhan.Text = "";
            TextBoxCMND_NguoiNhan.Text = "";
        }
        #endregion

        #region btndongy_Click >> Tiếp tục
        protected void btndongy_Click(object sender, EventArgs e)
        {
            try
            {
                Panel1.Visible = false;
                Panel2.Visible = true;
                btnnhaplai.Enabled = false;
                btnQuayLai.Enabled = true;
                btnMuaHang.Enabled = true;
                btndongy.Enabled = false;

                // Hiển thị thông tin người mua
                this.HienThiThongTinKhachHangTuTextBox();

                // Hiển thị thông tin người nhận hàng
                this.HienThiThongTinNguoiNhan();

                // Hiển thị hình thức giao hàng
                this.lblPTGH.Text = this.DropDownListPhuongThucGiaoHang.SelectedItem.Text;

                // Hiển thị hình thức thanh toán
                this.lblPTTT.Text = this.DropDownListPhuongThucThanhToan.SelectedItem.Text;

                this.loadGridView();
            }
            catch
            {
                throw;
            }
        }
        #endregion

        #region LoadGidview
        public void loadGridView()
        {
            decimal tongtien;
            List<GioHangDTO> lst = (List<GioHangDTO>)Session["GioHang"];
            if (lst.Count > 0)
            {
                tongtien = this.tongTien(lst);

                GVGioHang.DataSource = lst;
                GVGioHang.DataBind();

                //if (GVGioHang.Rows.Count != 0)
                //{
                Label lblTongTien = (Label)GVGioHang.FooterRow.Cells[4].FindControl("lbltongtien");
                lblTongTien.Text = String.Format("{0:0,0}", tongtien);
                //}
            }
        }

        // tổng tiền
        public decimal tongTien(List<GioHangDTO> gioHang)
        {
            decimal tongtien = 0;
            for (int i = 0; i < gioHang.Count; i++)
            {
                tongtien = tongtien + gioHang[i].ThanhTien;
            }

            return tongtien;
        }

        #endregion

        #region ckbGiongKhachHang_CheckedChanged
        protected void ckbGiongKhachHang_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbGiongKhachHang.Checked == true)
            {
                clearThongTinNguoiNhan();
                this.DropDownListDiaChiKhac.SelectedIndex = 0;
                this.HienThiThongTinNguoiNhan();
            }
            else
            {
                clearThongTinNguoiNhan();
            }
        }
        #endregion

        #region btnMuaHang_Click
        protected void btnMuaHang_Click(object sender, EventArgs e)
        {
            try
            {
                System.Threading.Thread.Sleep(5000);
                this.lapHoaDon();

                Panel1.Visible = false;
                Panel2.Visible = false;
                Panel3.Visible = true;

                // Hủy session đi
                Session["GioHang"] = null;
                //this.loadGridView();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }


        private void lapHoaDon()
        {
            // Các trường hợp:
            // 1. Người nhận hàng là mới
            // 2. Người nhận hàng đã có trong csdl và được khách hàng chọn

            // Khi thêm hóa đơn sẽ xử lý các nội dung sau:
            // 1. Thêm hóa đơn
            // 2. Thêm chi tiết hóa đơn
            // 3. Thêm mới người nhận hàng (Nếu có)
            // 4. Cập nhật thông tin khách hàng

            HoaDonDTO hdDTO = new HoaDonDTO();
            HoaDonBLL hdBLL = new HoaDonBLL();
            this.nnhDTO = new NguoiNhanHangDTO();
            this.nnhBLL = new NguoiNhanHangBLL();
            this.khBLL = new KhachHangBLL();
            this.khDTO = new KhachHangDTO();
            TaoMaSoTuDongBLL tmstdBLL = new TaoMaSoTuDongBLL();

            // thông tin đơn hàng
            hdDTO.MaHoaDon = tmstdBLL.TaoMaTuDong("HoaDon");
            hdDTO.MaKhachHang = this.LabelMaKhachHang.Text;
            // Mã người nhận hàng
            hdDTO.NgayLapHoaDon = DateTime.Now;
            hdDTO.NgayGiao = DateTime.Now;


            //thông tin người nhận khách hàng chọn
            if (this.DropDownListDiaChiKhac.SelectedIndex != 0)
            {
                hdDTO.MaNguoiNhanHang = int.Parse(this.DropDownListDiaChiKhac.SelectedValue);
            }
            else
            {
                //if (ckbGiongKhachHang.Checked == true)
                //{
                nnhDTO.MaKhachHang = this.LabelMaKhachHang.Text;
                nnhDTO.TenNguoiNhanHang = txthotennguoinhan.Text;
                nnhDTO.DienThoai = txtdienthoainguoinhan.Text;
                nnhDTO.DiaChi = txtdiachinguoinhan.Text;
                nnhDTO.GioiTinh = 1; // không cần thiết
                nnhDTO.CMND = this.TextBoxCMND_NguoiNhan.Text;

                this.nnhBLL.ThemNguoiNhanHang(nnhDTO);

                List<NguoiNhanHangDTO> _lstNguoiNhanHang = new List<NguoiNhanHangDTO>();
                _lstNguoiNhanHang = this.nnhBLL.usp_GetListNguoiNhanHangTheoMaKhachHang(this.LabelMaKhachHang.Text);
                if (_lstNguoiNhanHang.Count > 0)
                    hdDTO.MaNguoiNhanHang = _lstNguoiNhanHang[0].MaNguoiNhanHang;
                //}
            }

            hdDTO.MaNhanVien = "A-NV0000000001"; // nhân viên mặc định sẽ xử lý đơn hàng
            hdDTO.MaHinhThucThanhToan = int.Parse(this.DropDownListPhuongThucThanhToan.SelectedValue);
            hdDTO.MaHinhThucGiaoHang = int.Parse(this.DropDownListPhuongThucGiaoHang.SelectedValue);
            hdDTO.MaKhuVucGiaoHang = 1;
            hdDTO.PhiGiaoHang = 0;
            Label lblTongTien = (Label)GVGioHang.FooterRow.Cells[4].FindControl("lbltongtien");
            hdDTO.TongTien = Convert.ToDecimal(lblTongTien.Text);
            hdDTO.VAT = 0;
            // Tổng tiền thanh toán - có roy
            hdDTO.TinhTrangHoaDon = 0;
            hdDTO.GhiChu = "Hóa đơn đặt hàng";

            List<GioHangDTO> _lstGioHang = new List<GioHangDTO>();
            _lstGioHang = (List<GioHangDTO>)Session["GioHang"];

            hdBLL.ThemHoaDon(hdDTO, _lstGioHang);


            // Cập nhật sản phẩm sau khi thêm hóa đơn
            SanPhamBLL _spBLL = new SanPhamBLL();

            for (int i = 0; i < _lstGioHang.Count; i++)
            {
                SanPhamDTO _spDTO = new SanPhamDTO();
                _spDTO = _spBLL.GetSanPham(_lstGioHang[i].MaSanPham);

                _spDTO.SoLuongTonKho = _spDTO.SoLuongTonKho - _lstGioHang[i].SoLuong;

                // Cập nhật số lượt mua cho từng sản phẩm
                _spDTO.SoLuotMua = _spDTO.SoLuotMua + 1;

                _spBLL.Sua(_spDTO);


            }



            // Cập nhật khách hàng
            this.khBLL = new KhachHangBLL();
            this.khDTO = new KhachHangDTO();
            this.khDTO = (KhachHangDTO)Session["KhachHang"];

            // Họ tên
            // Địa chỉ
            // CMND
            // Điện thoại
            this.khDTO.TenKhachHang = this.txthoten.Text;
            this.khDTO.DiaChi = this.txtdiachi.Text;
            this.khDTO.CMND = this.TextBoxCMND_KhachHang.Text;
            this.khDTO.DienThoai = this.txtdienthoai.Text;

            this.khBLL.Sua(this.khDTO);

            // Gởi Email thông báo đặt hàng thành công
            List<string> _lstEmail = new List<string>();
            _lstEmail.Add(this.khDTO.Email);

            //========Create content for Email================//
            string _contentEmail = "Chúc mừng bạn đã đặt hàng thành công tại <a href='http://localhost:50000/Default.aspx' title='AB Online'>AB Online</a>. Cảm ơn bạn !!! <br /><br />";
            _contentEmail += "<h2>Chi tiết mua hàng: </h2><br /><br />";

            _contentEmail += "<table cellspacing='0' cellpadding='4' rules='all' id='tblGVGioHang' ";
            _contentEmail += "style='background-color:White;border-color:#E4E4E4;border-width:1px;border-style:None;";
            _contentEmail += "width:100%;border-collapse:collapse;'>";
            _contentEmail += "<tbody>";
            _contentEmail += "<tr style='color:White;background-color:#9F5DA1;font-weight:bold;'>";

            //STT
            _contentEmail += "<th scope='col'>STT</th>";

            _contentEmail += "<th scope='col'>Mã Sản Phẩm</th>";
            _contentEmail += "<th scope='col'>Tên Sản Phẩm</th>";
            _contentEmail += "<th scope='col'>Số Lượng</th>";
            _contentEmail += "<th scope='col'>Đơn Giá</th>";
            _contentEmail += "<th scope='col'>Thành Tiền</th>";
            _contentEmail += "</tr>";

            int _stt = 0;
            string _maSP = "";
            string _tenSP = "";
            string _soLuong = "";
            string _donGia = "";
            string _thanhTien = "";


            for (int i = 0; i < _lstGioHang.Count; i++)
            {
                _stt = i + 1;

                _maSP = _lstGioHang[i].MaSanPham;
                _tenSP = _lstGioHang[i].TenSanPham;
                _soLuong = _lstGioHang[i].SoLuong.ToString();
                _donGia = CommonClass.FormatCurrency(_lstGioHang[i].GiaBan).ToString();
                _thanhTien = CommonClass.FormatCurrency(_lstGioHang[i].ThanhTien).ToString();

                if (i % 2 == 0) //Row chan
                {
                    _contentEmail += "<!--Rows chan-->";
                    _contentEmail += "<tr onmouseover='this.style.backgroundColor='#bde2fd'' ";
                    _contentEmail += "onmouseout='this.style.backgroundColor='#EFF3FB'' ";
                    _contentEmail += "style='color: rgb(51, 0, 153); background-color: rgb(239, 243, 251);'>";
                }
                else
                {
                    _contentEmail += "<!-- Rows le -->";
                    _contentEmail += "<tr onmouseover='this.style.backgroundColor='#bde2fd''";
                    _contentEmail += "    onmouseout='this.style.backgroundColor='White'' ";
                    _contentEmail += "    style='color: rgb(51, 0, 153); background-color: white;'>";
                }


                ///////////////////////////////////////////////////////////////////////////////////
                //STT
                _contentEmail += "<td>";
                _contentEmail += "<span id='STT'><div align='center'>" + _stt + "</div></span>";
                _contentEmail += "</td>";

                //Ma SP
                _contentEmail += "<td>";
                _contentEmail += "<span id='ContentPlaceHolder1_GVGioHang_lblmasanpham_0'>" + _maSP + "</span>";
                _contentEmail += "</td>";
                _contentEmail += "<td>";

                //Ten SP
                _contentEmail += "<span id='ContentPlaceHolder1_GVGioHang_lbltensanpham_0'>" + _tenSP + "</span>";
                _contentEmail += " </td>";
                _contentEmail += "<td>";

                //So luong
                _contentEmail += "<span id='ContentPlaceHolder1_GVGioHang_lblsoluong_0'><div align='center'>" + _soLuong + "</div></span>";
                _contentEmail += "</td>";
                _contentEmail += "<td>";

                //Don gia
                _contentEmail += "<span id='ContentPlaceHolder1_GVGioHang_lbldongia_0'><div align='right'>" + _donGia + "</div></span>";
                _contentEmail += "</td>";

                //Thanh tien
                _contentEmail += "<td>";
                _contentEmail += "<span id='ContentPlaceHolder1_GVGioHang_lblthanhtien_0'><div align='right'>" + _thanhTien + "</div></span>";
                _contentEmail += "</td>";
                _contentEmail += "</tr>";

                ////////////////////////////////////////////////////////////////////////////////////
            }



            //=======Tong tien=========//
            _contentEmail += "<tr style='color:#330099;background-color:#D8C0E6;'>";
            _contentEmail += "<td>&nbsp;</td>";
            _contentEmail += "<td>&nbsp;</td>";
            _contentEmail += "<td>&nbsp;</td>";
            _contentEmail += "<td>&nbsp;</td>";
            _contentEmail += "<td>";
            _contentEmail += "<span id='ContentPlaceHolder1_GVGioHang_Label9' style='font-weight:bold;'>";
            _contentEmail += "Tổng Tiền: ";
            _contentEmail += "</span>";
            _contentEmail += "&nbsp;";
            _contentEmail += "</td>";
            _contentEmail += "<td>";
            _contentEmail += "<span id='ContentPlaceHolder1_GVGioHang_lbltongtien' ";
            _contentEmail += "style='color:#CC3300;font-size:Small;font-weight:bold;'><div align='right'>" + CommonClass.FormatCurrency(lblTongTien.Text) + "</div></span>";
            _contentEmail += "&nbsp;VNĐ";
            _contentEmail += "</td>";
            _contentEmail += "</tr>";
            //=======End Tong tien=========//

            _contentEmail += "</tbody>";
            _contentEmail += "</table>";

            //for (int i = 0; i < _lstGioHang.Count; i++)
            //{

            //}

            CommonClass.SendEmail(_lstEmail, "Thông báo đặt hàng thành công", "Đặt hàng thành công", _contentEmail);
        }
        #endregion

        #region GVGioHang_RowDataBound
        protected void GVGioHang_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowIndex >= 0)
            {
                e.Row.Attributes.Add("onMouseOver", "this.style.backgroundColor='#bde2fd'");

                if (e.Row.RowIndex % 2 == 0)
                    e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='#EFF3FB'");
                else
                    e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='White'");
            }
        }
        #endregion

        #region DropDownListDiaChiKhac_SelectedIndexChanged
        protected void DropDownListDiaChiKhac_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                this.clearThongTinNguoiNhan();
                this.ckbGiongKhachHang.Checked = false;

                // GetNguoiNhanHangDTO
                string _manguoinhanhang = this.DropDownListDiaChiKhac.SelectedValue;
                this.nnhBLL = new NguoiNhanHangBLL();
                this.nnhDTO = new NguoiNhanHangDTO();
                this.nnhDTO = this.nnhBLL.GetNguoiNhanHang(_manguoinhanhang);
                if (this.nnhDTO.MaNguoiNhanHang != -1)
                {
                    // Gán vào textbox người nhận hàng

                    // Họ tên người nhận
                    // Địa chỉ
                    // Điện thoại                    
                    // CMND

                    this.txthotennguoinhan.Text = this.nnhDTO.TenNguoiNhanHang;
                    this.txtdiachinguoinhan.Text = this.nnhDTO.DiaChi;
                    this.txtdienthoainguoinhan.Text = this.nnhDTO.DienThoai;
                    this.TextBoxCMND_NguoiNhan.Text = this.nnhDTO.CMND;
                }
            }
            catch
            {
                throw;
            }
        }
        #endregion
    }
}